/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package xcore.model;

import org.eclipse.emf.common.util.EList;

import xcore.constraint.XIntVar;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>XClass</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link xcore.model.XClass#isAbstract <em>Abstract</em>}</li>
 *   <li>{@link xcore.model.XClass#getXSuperClass <em>XSuper Class</em>}</li>
 *   <li>{@link xcore.model.XClass#getXSubClasses <em>XSub Classes</em>}</li>
 *   <li>{@link xcore.model.XClass#getCardinality <em>Cardinality</em>}</li>
 *   <li>{@link xcore.model.XClass#getXReferences <em>XReferences</em>}</li>
 *   <li>{@link xcore.model.XClass#getSelfCardinlity <em>Self Cardinlity</em>}</li>
 *   <li>{@link xcore.model.XClass#getFirstObject <em>First Object</em>}</li>
 *   <li>{@link xcore.model.XClass#getXAttributes <em>XAttributes</em>}</li>
 *   <li>{@link xcore.model.XClass#getXObjects <em>XObjects</em>}</li>
 * </ul>
 * </p>
 *
 * @see xcore.model.ModelPackage#getXClass()
 * @model
 * @generated
 */
public interface XClass extends XElement {
	/**
	 * Returns the value of the '<em><b>Abstract</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Abstract</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Abstract</em>' attribute.
	 * @see #setAbstract(boolean)
	 * @see xcore.model.ModelPackage#getXClass_Abstract()
	 * @model required="true"
	 * @generated
	 */
	boolean isAbstract();

	/**
	 * Sets the value of the '{@link xcore.model.XClass#isAbstract <em>Abstract</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Abstract</em>' attribute.
	 * @see #isAbstract()
	 * @generated
	 */
	void setAbstract(boolean value);

	/**
	 * Returns the value of the '<em><b>XSuper Class</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link xcore.model.XClass#getXSubClasses <em>XSub Classes</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>XSuper Class</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>XSuper Class</em>' reference.
	 * @see #setXSuperClass(XClass)
	 * @see xcore.model.ModelPackage#getXClass_XSuperClass()
	 * @see xcore.model.XClass#getXSubClasses
	 * @model opposite="xSubClasses"
	 * @generated
	 */
	XClass getXSuperClass();

	/**
	 * Sets the value of the '{@link xcore.model.XClass#getXSuperClass <em>XSuper Class</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>XSuper Class</em>' reference.
	 * @see #getXSuperClass()
	 * @generated
	 */
	void setXSuperClass(XClass value);

	/**
	 * Returns the value of the '<em><b>XSub Classes</b></em>' reference list.
	 * The list contents are of type {@link xcore.model.XClass}.
	 * It is bidirectional and its opposite is '{@link xcore.model.XClass#getXSuperClass <em>XSuper Class</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>XSub Classes</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>XSub Classes</em>' reference list.
	 * @see xcore.model.ModelPackage#getXClass_XSubClasses()
	 * @see xcore.model.XClass#getXSuperClass
	 * @model opposite="xSuperClass"
	 * @generated
	 */
	EList<XClass> getXSubClasses();

	/**
	 * Returns the value of the '<em><b>Cardinality</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Cardinality</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Cardinality</em>' containment reference.
	 * @see #setCardinality(XIntVar)
	 * @see xcore.model.ModelPackage#getXClass_Cardinality()
	 * @model containment="true" required="true"
	 * @generated
	 */
	XIntVar getCardinality();

	/**
	 * Sets the value of the '{@link xcore.model.XClass#getCardinality <em>Cardinality</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Cardinality</em>' containment reference.
	 * @see #getCardinality()
	 * @generated
	 */
	void setCardinality(XIntVar value);

	/**
	 * Returns the value of the '<em><b>XReferences</b></em>' reference list.
	 * The list contents are of type {@link xcore.model.XReference}.
	 * It is bidirectional and its opposite is '{@link xcore.model.XReference#getXClass <em>XClass</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>XReferences</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>XReferences</em>' reference list.
	 * @see xcore.model.ModelPackage#getXClass_XReferences()
	 * @see xcore.model.XReference#getXClass
	 * @model opposite="xClass"
	 * @generated
	 */
	EList<XReference> getXReferences();

	/**
	 * Returns the value of the '<em><b>Self Cardinlity</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Self Cardinlity</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Self Cardinlity</em>' containment reference.
	 * @see #setSelfCardinlity(XIntVar)
	 * @see xcore.model.ModelPackage#getXClass_SelfCardinlity()
	 * @model containment="true" required="true"
	 * @generated
	 */
	XIntVar getSelfCardinlity();

	/**
	 * Sets the value of the '{@link xcore.model.XClass#getSelfCardinlity <em>Self Cardinlity</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Self Cardinlity</em>' containment reference.
	 * @see #getSelfCardinlity()
	 * @generated
	 */
	void setSelfCardinlity(XIntVar value);

	/**
	 * Returns the value of the '<em><b>First Object</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>First Object</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>First Object</em>' attribute.
	 * @see #setFirstObject(int)
	 * @see xcore.model.ModelPackage#getXClass_FirstObject()
	 * @model required="true"
	 * @generated
	 */
	int getFirstObject();

	/**
	 * Sets the value of the '{@link xcore.model.XClass#getFirstObject <em>First Object</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>First Object</em>' attribute.
	 * @see #getFirstObject()
	 * @generated
	 */
	void setFirstObject(int value);

	/**
	 * Returns the value of the '<em><b>XAttributes</b></em>' reference list.
	 * The list contents are of type {@link xcore.model.XAttribute}.
	 * It is bidirectional and its opposite is '{@link xcore.model.XAttribute#getXClass <em>XClass</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>XAttributes</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>XAttributes</em>' reference list.
	 * @see xcore.model.ModelPackage#getXClass_XAttributes()
	 * @see xcore.model.XAttribute#getXClass
	 * @model opposite="xClass"
	 * @generated
	 */
	EList<XAttribute> getXAttributes();

	/**
	 * Returns the value of the '<em><b>XObjects</b></em>' reference list.
	 * The list contents are of type {@link xcore.model.XObject}.
	 * It is bidirectional and its opposite is '{@link xcore.model.XObject#getXClass <em>XClass</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>XObjects</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>XObjects</em>' reference list.
	 * @see xcore.model.ModelPackage#getXClass_XObjects()
	 * @see xcore.model.XObject#getXClass
	 * @model opposite="xClass"
	 * @generated
	 */
	EList<XObject> getXObjects();

} // XClass
